Software or data may be distributed from a server to a variety of client processor-based systems. Typically, software packages may be periodically sent to a large number of processor-based systems within a network. Examples of software and data which may be distributed are system software, updates to system software, applications, updates to applications, and other forms of data packages. Such software or data may be distributed from a central server to a large number of clients. Distributing software or data from a server to a large number of clients, particularly as required when a software update is released, involves a large amount of time and resources which increases the cost of such a software update. Devices which require software installation may be in the form of computers, mobile telephones, Personal Digital Assistants (hereinafter referred to as “PDAs”), devices with embedded software, etc.
As the use of mobile devices becomes more widespread through the use of wireless communication, the practicalities of providing updates to software or new software for the mobile devices is increasingly problematic and costly.
Distribution of software typically involves packaging a number of files into one or more containing files on a central server or distribution media. These file(s) are then sent over a network or communications medium, or directly to a target device where the file(s) are opened and installed.
By way of example, the following scenario is presented.
A first device, device A, downloads a software distribution kit from a server. This kit is an executable and, when run, extracts and installs the contained software, carrying out a configuration as necessary.
A second device, device B, requires the same software as device A, and two choices are available:
1) Download the software from the same server at which device A obtained the software.
2) Obtain the software from device A directly, provided device A is within communication range of device B.
It is assumed in this scenario that there are only two devices for simplicity. In reality, there may be an entire range of devices from which to select.
The first choice may be problematic for a number of reasons. The software may be large in size and may therefore take a long time to download due to bandwidth restrictions. This could mean significant expense in terms of download time due to the type of wide area network (WAN) in use. It could be problematic due to intermittent network access; this is particularly evident when the target server is some distance away in network terms, and a wireless network is involved.
Similarly, the server that holds the software repository could become unavailable preventing device B from downloading the software until the server is available again. This is particularly unacceptable in a business environment.
The second choice has a number of advantages that overcome deficiencies of the first choice. The software has already been downloaded by device A, shielding device B from any problems with the server. Download becomes less problematic or costly due to direct connection (peer-to-peer networking) with device A, which should be closer to device B and should involve a lower cost.
However, the problem with the second choice is that the software that device A downloaded has been un-packed and installed on that device. This is likely to mean that the method of installing the software on the device has been lost. For example, a template or base configuration file may have been configured to that particular device's specification upon installation.
This could be overcome by retaining the original software distribution kit; however, this is not guaranteed to exist. The packaged form may have been deleted for the following reasons:                it was automatically cleaned up after the contents were extracted;        outside intervention deleted the file (i.e. user); or        the user deleted the installation file as there was not enough space on the device at the time to hold both the packaged and unpackaged forms of the software on the device. This last point is particularly relevant to mobile, pervasive, or embedded devices.        
Some method for re-generating the packaged software distribution kit in its original form is required to enable re-distribution to other devices in a peer-to-peer networking environment. The solution is to enable a device to re-create the software distribution kit such that software can be redistributed to other devices for installation. This re-creation may be on the fly, as opposed to storing it locally hence consuming more resources.
Reverse-engineering of an installed software image to create the original, distributable kit allows devices themselves to act as peer-to-peer software distribution servers. This is particularly advantageous in the mobile world where many devices require the same software and currently have to go to some sort of centralized server to retrieve it. Each device becomes capable of acting as a software distribution server in order to propagate software to its neighbors.
A device may propagate the software to its neighbors in many different environments depending on the nature of the device. For example, if the device is a mobile telephone, it may distribute software updates to other mobile telephones which are within range in an office environment. Similarly, if the device is an onboard car computer, it may distribute software to other onboard car computers in a parking lot.